package cn.wp.ewallet.upms.service.impl;

import cn.wp.common.core.authentication.AuthenticationContext;
import cn.wp.common.core.dto.WpResult;
import cn.wp.common.core.util.BeanUtil;
import cn.wp.ewallet.upms.dao.StaffInfoDao;
import cn.wp.ewallet.upms.dao.SystemRolesInfoDao;
import cn.wp.ewallet.upms.model.dto.StaffInfoDto;
import cn.wp.ewallet.upms.model.dto.SystemRolesInfoDto;
import cn.wp.ewallet.upms.model.entity.StaffInfoDo;
import cn.wp.ewallet.upms.model.entity.SystemRolesInfoDo;
import cn.wp.ewallet.upms.service.SystemRolesInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 角色控制类-服务层实现类
 * Created by yangjin on 2019/12/25
 */
@Service
public class SystemRolesInfoServiceImpl implements SystemRolesInfoService {

    @Autowired
    private SystemRolesInfoDao systemRolesInfoDao;

    @Autowired
    private StaffInfoDao staffInfoDao;

    @Autowired
    private AuthenticationContext authenticationContext;

    @Override
    public WpResult getAllRoles() {
        /*
        ZcmgAuthenticationInfo zcmgAuthenticationInfo = (ZcmgAuthenticationInfo) authenticationContext.currentUser();
        //查询当前用户所有角色
        List<SystemRolesInfoDo> systemRolesInfos = systemRolesInfoDao.getRoleIds(zcmgAuthenticationInfo.getId());
        List<SystemRolesInfoDto> systemRolesInfoDtos = new ArrayList<>();
        SystemStaffRolesInfoDto systemStaffRolesInfoDto = new SystemStaffRolesInfoDto();
        List<StaffInfoDo> staffInfoDos = new ArrayList<>();
        StaffInfoDo staffInfoDo1 = staffInfoDao.selectStaffInfo(zcmgAuthenticationInfo.getId());
        staffInfoDos.add(staffInfoDo1);
        systemRolesInfoDtos.add(new SystemRolesInfoDto(ZcmgConstant.STAFF, "普通员工"));

        //当前登录用户为PMO小组成员
        Optional<SystemRolesInfoDo> first1 = systemRolesInfos.stream().filter(a -> ZcmgConstant.PMO_MEMBER.equals(a.getSysRoleId())).findFirst();
        if (first1.isPresent()) {
            systemRolesInfoDtos.add(new SystemRolesInfoDto(ZcmgConstant.GROUP_LEADER, "小组负责人"));
            systemRolesInfoDtos.add(new SystemRolesInfoDto(ZcmgConstant.PMO_MEMBER, "PMO成员"));

            staffInfoDos = staffInfoDao.selectAllStaffInfos();
        }

        //当前登录用户为小组负责人
        Optional<SystemRolesInfoDo> first2 = systemRolesInfos.stream().filter(a -> ZcmgConstant.GROUP_LEADER.equals(a.getSysRoleId())).findFirst();
        if (first2.isPresent()) {
            systemRolesInfoDtos.add(new SystemRolesInfoDto(ZcmgConstant.GROUP_LEADER, "小组负责人"));
            //查询小组组织ID
            String orgId = staffInfoDao.selectStaffOrgId(zcmgAuthenticationInfo.getId());
            staffInfoDos = staffInfoDao.selectOrgStaffInfos(orgId);
        }

        List<StaffInfoDto> staffInfoDtos = new ArrayList<>();
        for (StaffInfoDo staffInfoDo : staffInfoDos) {
            StaffInfoDto staffInfoDto = BeanUtil.copyProperties(staffInfoDo, StaffInfoDto.class);
            staffInfoDtos.add(staffInfoDto);
        }
        systemStaffRolesInfoDto.setSystemRolesInfoDtos(systemRolesInfoDtos);
        systemStaffRolesInfoDto.setStaffInfoDtos(staffInfoDtos);
        */
        return new WpResult().success();
    }

    @Override
    public WpResult getRoleList() {
        List<SystemRolesInfoDo> systemRolesInfoDos = systemRolesInfoDao.selectRoleList();
        List<SystemRolesInfoDto> systemRolesInfoDtos = BeanUtil.listCopyProperties(systemRolesInfoDos, SystemRolesInfoDto.class);
        return new WpResult().success(systemRolesInfoDtos);
    }

    @Override
    public WpResult getStaffInfoList() {
        List<StaffInfoDo> staffInfoDos = staffInfoDao.selectAllStaffInfosByAuthority();
        List<StaffInfoDto> staffInfoDtos = BeanUtil.listCopyProperties(staffInfoDos, StaffInfoDto.class);
        return new WpResult().success(staffInfoDtos);
    }
}
